#ifndef FILTRO_H
#define FILTRO_H
#include <QSize>
#include <QImage>
#include <iostream>
using namespace std;
#include "imagen.h"
#include <math.h>

typedef int (*compfn)(const void*, const void*); //Se usa en el qsort de los k-vecinos


class Filtro {
private:
    int col;
    int fil;
    int size;
    bool separable;
    double * kernel; //ya sea separado o no se considera como una array
    int kernelf;
    int kernelc;
    QImage* image;
    int ajustar(const double d);
    void posicion(int posActual, int &x, int &y);

public:
    Filtro(QImage* imageIn, double * kernelIn, int kernelc, int kernelf, bool separableIn);
    void aplicarFiltro();
    virtual ~Filtro();
    static void vmMediana(QImage& image, int f, int c);
    static void vmKVecinos(QImage& image, int ventanaF, int ventanaC, int k);
    static void vmModa(QImage& image, int f, int c);
};
#endif // FILTRO_H
